/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager.editar;

import br.com.deployment.dao.TipoSeloDao;
import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.entidade.selo.DetalheEntradaSelo;
import br.com.deployment.entidade.selo.EntradaSelo;
import br.com.deployment.manager.ManagerEntradaSelo;
import br.com.deployment.message.Msg;
import br.com.deployment.servico.DetalheEntradaSeloServico;
import br.com.deployment.servico.EntradaSeloServico;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author luciano
 */
@ManagedBean
@SessionScoped
public class ManagerEditarEntradaSelo implements Serializable{

    @EJB
    TipoSeloDao tipoSeloDao;
    @EJB
    EntradaSeloServico entradaSeloServico;
    @EJB
    DetalheEntradaSeloServico detalheEntradaSeloServico;
    EntradaSelo entradaSelo;
    List<DetalheEntradaSelo> detalhes;
    Usuario usr;
    DetalheEntradaSelo detalhe;

    public ManagerEditarEntradaSelo() {
        detalhe = new DetalheEntradaSelo();
    }

    public void adicionarDetalhe() {
        boolean contains = false;
        detalhe.setNumFim(detalhe.getNumIni() + detalhe.getQtd() - 1);
        detalhe.setTipoSelo(tipoSeloDao.find(detalhe.getTipoSelo().getId()));

        for (DetalheEntradaSelo dsVer : detalhes) {
            if ((dsVer.getSerie().equalsIgnoreCase(detalhe.getSerie()))
                    && (dsVer.getTipoSelo().getId() == detalhe.getTipoSelo().getId())) {
                if ((detalhe.getNumIni() >= dsVer.getNumIni()) && (detalhe.getNumFim() <= dsVer.getNumFim())) {
                    contains = true;
                }
            }
        }
        if (!contains) {
            detalhes.add(detalhe);
            detalhe = new DetalheEntradaSelo();
        } else {
            Msg.messagemWarn("Série, Tipo do Selo, valor e numeração duplicada, verifique os dados!");
        }
    }

    public void atualizar() {
        entradaSelo.setListDetalhe(detalhes);
        entradaSeloServico.atualizar(entradaSelo);
        Msg.messagemInfo("Entrada de selo atualizado com sucesso.");
    }
    
    public void alterarDetalhe(DetalheEntradaSelo detalheEntradaSelo) {
        this.detalhe = detalheEntradaSelo;
        detalhes.remove(detalheEntradaSelo);
    }

    public void removerDetalhe(DetalheEntradaSelo detalheEntradaSelo) {
        detalhes.remove(detalheEntradaSelo);
    }


    public void redirect(String string, EntradaSelo entradaSelo) {
        try {
            FacesContext context = FacesContext.getCurrentInstance();
            this.entradaSelo = entradaSelo;
            this.detalhes = detalheEntradaSeloServico.getEntradaSelo(entradaSelo);
            context.getExternalContext().redirect(string);
        } catch (IOException ex) {
            Logger.getLogger(ManagerEntradaSelo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public DetalheEntradaSelo getDetalhe() {
        return detalhe;
    }

    public void setDetalhe(DetalheEntradaSelo detalhe) {
        this.detalhe = detalhe;
    }

    public List<DetalheEntradaSelo> getDetalhes() {
        return detalhes;
    }

    public void setDetalhes(List<DetalheEntradaSelo> detalhes) {
        this.detalhes = detalhes;
    }

    public EntradaSelo getEntradaSelo() {
        return entradaSelo;
    }

    public void setEntradaSelo(EntradaSelo entradaSelo) {
        this.entradaSelo = entradaSelo;
    }

    public boolean naoPodeModificar(DetalheEntradaSelo detalheEntradaSelo) {
        return !detalheEntradaSeloServico.podeModificar(detalheEntradaSelo);
    }
}
